package com.cmxh.cloundnote.util;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.util.ListUtils;
import com.cmxh.cloundnote.mapper.ArticleMapper;
import com.cmxh.cloundnote.pojo.Article;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

/**我们在读取excel文件的时候可以用到**/
@Component
public class UserListener implements ReadListener<Article> {
    /**每隔5条存储数据库，实际使用中可以100条，然后清理list，方便内存回收**/
    private static final int BATCH_COUNT = 100;
    /**缓存数据**/
    private List<Article> cache = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
    @Override
    public void invoke(Article xxxx, AnalysisContext analysisContext) {
        /**我们没次从excel读取一条数据 封装成Article对象 把他存放在我刚定义的集合中**/
        cache.add(xxxx);
        if (cache.size() >= BATCH_COUNT){
            saveData();//saveData中我会调用数据访问层对象  将刚才读取到的100个对象存放到MySQL中
            //cache置为空List，方便观察 work
            cache = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
        }
    }
@Autowired
private ArticleMapper articleMapper;
    private void saveData() {
        System.out.println("开始储存数据库数据"+cache.size());
        /**把存放数据的集合传递到数据访问层**/
        articleMapper.batchSaveAccount(cache);

    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
/**
 * 这里也要存放数据
 * 确保最后遗留的数据也储存到数据库
 * **/
        System.out.println("最终数据存储");
        saveData();
        System.out.println("数据存储完成");
    }
}
